"""
根据API文档创建使用 doubao-seed-1-6 模型的智能体

参考文档: docs/v2.1.0-llmops-app-server-api_doc.md
"""
import os
import sys

# 添加项目路径
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, project_root)

from src.llm.hiagent_app.utils.api_client import HiAgentAPIClient
from src.llm.hiagent_app.services.personal_agent_service import PersonalAgentService
from src.llm.hiagent_app.models.hiagent_models import AppType


def create_agent_with_doubao():
    """创建使用 doubao-seed-1-6 模型的智能体"""

    print("[开始] 创建智能体...")

    # 初始化API客户端和服务
    api_client = HiAgentAPIClient()
    agent_service = PersonalAgentService(api_client)

    # 智能体基本信息
    agent_name = "豆包测试智能体"
    description = "使用 doubao-seed-1-6 模型的测试智能体"

    # 检查名称是否重复
    print(f"[检查] 智能体名称: {agent_name}")
    is_available = agent_service.check_agent_name(agent_name)
    if not is_available:
        print(f"[警告] 名称 '{agent_name}' 已被使用，将使用新名称")
        import time
        agent_name = f"{agent_name}_{int(time.time())}"
        print(f"[更新] 新名称: {agent_name}")

    # 创建智能体
    print(f"\n[执行] 创建智能体...")
    app_id = agent_service.create_personal_agent(
        name=agent_name,
        description=description,
        app_type=AppType.CHAT
    )

    if not app_id:
        print("[失败] 创建智能体失败")
        return None

    print(f"[成功] 智能体创建成功!")
    print(f"   AppID: {app_id}")

    # 说明后续配置步骤
    print(f"\n[下一步]:")
    print(f"   1. 查看当前配置（调用 get_agent_config）")
    print(f"   2. 设置模型为 doubao-seed-1-6（调用 save_agent_config_with_model）")
    print(f"   3. 验证配置是否正确保存")
    print(f"\n[提示]:")
    print(f"   - 根据文档 app.AppConfigInfo 结构设置配置")
    print(f"   - 使用 SaveAppConfigDraft API 保存草稿")
    print(f"   - ModelID 字段用于指定模型")

    return app_id


def get_agent_config(app_id: str):
    """获取智能体配置"""
    api_client = HiAgentAPIClient()

    try:
        body = {
            "WorkspaceID": api_client.config.DEFAULT_WORKSPACE_ID,
            "AppID": app_id
        }

        # 获取单Agent模式草稿配置
        response = api_client.make_request("GetAppSingleModeDraft", body)

        print("[配置] 当前配置:")
        import json
        print(json.dumps(response, indent=2, ensure_ascii=False))

        return response

    except Exception as e:
        print(f"[错误] 获取配置失败: {e}")
        return None


def save_agent_config_with_model(app_id: str, model_id: str = "doubao-seed-1-6"):
    """保存智能体配置并设置模型

    参考文档结构:
    - app.AppConfigInfo 包含 ModelID, ModelConfig, PrePrompt 等字段
    - 使用 SaveAppConfigDraft API 保存配置草稿
    """
    api_client = HiAgentAPIClient()

    try:
        # 根据API文档 app.ModelConfig 结构构建配置
        # 参考文档: docs/v2.1.0-llmops-app-server-api_doc.md 第 22296-22320 行
        app_config_draft = {
            "ModelID": model_id,  # 设置模型ID为 doubao-seed-1-6
            "ModelConfig": {
                # 必需字段
                "Temperature": 0.7,       # 随机性（必需），范围 0-1
                "TopP": 0.9,             # 核采样（必需），范围 0-1
                "MaxTokens": 2000,       # 单次回复token数（必需）
                "RoundsReserved": 10,    # 对话轮数保留（必需）
                "RagNum": 5,             # RAG检索数量（必需）
                "Strategy": "react",     # 策略（必需），默认 react
                "MaxIterations": 5,      # 最大迭代次数（必需），范围 1-5，默认 5
                "RagEnabled": False,     # RAG开关（必需），默认关闭 false
                # 可选字段
                "IsAdvancedMode": False, # 是否是高级模式，默认为精简模式 false
                "CurrentTimeEnabled": False,  # 当前时间开关，默认 false
            },
            "PrePrompt": "你是一个智能助手，使用豆包模型为用户提供帮助。请友好、专业地回答用户的问题。",
            # 其他可选配置
            # "VariableConfigs": [],  # 变量配置
            # "ToolIDs": [],  # 工具ID列表
            # "WorkflowIDs": [],  # 工作流ID列表
            # "KnowledgeIDs": [],  # 知识库ID列表
        }

        body = {
            "WorkspaceID": api_client.config.DEFAULT_WORKSPACE_ID,
            "AppID": app_id,
            "AppConfigDraft": app_config_draft,  # 单Agent模式草稿配置
        }

        # 使用 SaveAppConfigDraft API 保存配置草稿
        response = api_client.make_request("SaveAppConfigDraft", body)

        print(f"[成功] 配置草稿已保存!")
        print(f"   模型ID: {model_id}")
        print(f"   提示词已设置")
        return True

    except Exception as e:
        print(f"[错误] 保存配置失败: {e}")
        import traceback
        traceback.print_exc()
        return False


def main():
    """主函数"""
    print("=" * 60)
    print("创建使用 doubao-seed-1-6 模型的智能体")
    print("=" * 60)

    # 创建智能体
    app_id = create_agent_with_doubao()

    if app_id:
        print(f"\n[完成] 智能体创建完成")
        print(f"   AppID: {app_id}")
        print(f"   模型: doubao-seed-1-6")

        # 获取配置查看
        print(f"\n[操作] 查看配置...")
        config = get_agent_config(app_id)

        # 尝试保存配置
        if config:
            print(f"\n[操作] 保存模型配置...")
            save_agent_config_with_model(app_id, "doubao-seed-1-6")
    else:
        print(f"\n[失败] 智能体创建失败")

    print(f"\n{'=' * 60}")


if __name__ == "__main__":
    main()
